package com.rankeiot.core.translator;

import com.rankeiot.core.excel.ExcelUtil;

import java.util.Map;

/**
 * 转换器，把bean中的某个字段值转换为其它值
 */
@FunctionalInterface
public interface Translator {
    /**
     * 把给出的value进行转换
     * @param target 转换的数据对象
     * @param filedName 转换的字段名称
     * @param value 需要转换的值
     * @return Object 转换后的值
     */
    Object translate(Object target,String filedName,Object value);
    Translator DEFAULT=(target,fieldName,value)->value;

    /**
     * 从一个Map获取转换器
     * @param mapping
     * @return
     */
    static Translator simple(Map<Object,Object> mapping){
        return new SimpleTranslator(mapping);
    }
    static Translator format(String format){
        return new FormatTranslator(format);
    }
    static Translator chain(Translator ... translators){
        return new ChainTranslator(translators);
    }

    /**
     * 从sqltoy获取翻译
     * @param name
     * @param type
     * @param multi
     * @return
     */
    static Translator getTranslator(String name, String type, boolean multi){
        return ExcelUtil.getTranslator(name,type,multi);
    }

    /**
     * 从sqltoy获取反向翻译
     * @param name
     * @param type
     * @param split
     * @return
     */
    static Translator getUnTranslator(String name, String type, String split){
        return ExcelUtil.getUnTranslator(name,type,split);
    }
}
